iT邦幫忙

2021 iThome 鐵人賽

DAY 23
0
自我挑戰組

學習NodeJS的30天系列 第 23

Day23 DB-NodeJS中的MySQL

  • 分享至 

  • xImage
  •  

理解關聯式資料庫與NoSQL之後,要學的是怎麼在NodeJS中使用資料庫相關的套件,今天內容是以MySQL為主,並以資料的讀取說明關聯式資料庫在NodeJS中的應用方法。

MySQL

MySQL過去是一個開放程式碼的關聯式資料庫管理系統,由於效能高、低成本且穩定性高,廣泛被使用在網頁系統上,例如:維基百科、google、Facebook等,目前為Oracle旗下產品,分為免費的社群版、付費的標準版與商業版,可以透過MySQL Workbench作為資料庫管理工具。

https://ithelp.ithome.com.tw/upload/images/20211008/20139980ZBBIzDpbuP.png

https://ithelp.ithome.com.tw/upload/images/20211008/20139980aj8l767Usv.png

NPM套件與使用方法

  1. MySQL在NPM中可以查到有mysql與mysql2兩個套件,兩者的比較可以在NPMCompare的網站裡查詢(https://npmcompare.com/compare/mysql,mysql2 ),這裡的練習使用的是較早被開發完成的mysql套件,一樣需要先進行安裝,並以require()引用mysql套件。。

https://ithelp.ithome.com.tw/upload/images/20211008/20139980mNUDu3FI7P.png

let mysql = require("mysql");
  1. 今天以讀取資料作為mysql套件的使用範例,因此先在MySQL Workbench中建立關聯式資料庫。

https://ithelp.ithome.com.tw/upload/images/20211008/20139980Y3csSsjjOL.jpg

  1. 在MySQL Workbench中測試查詢資料的SQL字串。

https://ithelp.ithome.com.tw/upload/images/20211008/20139980YWbDl5XZ3I.png

  1. 在主程式app.js中加入一個中介層。
app.use("/", (req, res, next)=>{
  
});
  1. mysql.createConnection()方法在中建層中建立一個連到指定資料庫的連線。
app.use("/", (req, res, next)=>{
  let con = mysql.createConnection({
    host: "localhost",
    port: 8889,
    user: "root",
    passwort: "root",
    database: "nodeProj"
  });
});
  1. 加入步驟3測試SQL字串的查詢動作。
app.use("/", (req, res, next)=>{
  let con = mysql.createConnection({
    host: "localhost",
    port: 8889,
    user: "root",
    passwort: "root",
    database: "nodeProj"
  });
  
  conn.query(con.query(`select person.id, firstName, lastName, address from person
  inner join personAddress on person.id = personAddress.Id inner join Address on
  personAddress.addrId = Address.addrId`,
  (err, rows)=>{
    if(err) throw err;
    console.log(rows);
  });
  
  next();
});
  1. 執行後可以從Terminal看到查詢後印出的資料,會以JSON格式的陣列印出。

https://ithelp.ithome.com.tw/upload/images/20211008/20139980jyMxZ5lPAq.png

小結

關聯式資料庫可用SQL語法將分開的關聯資料表,互相join取得想要的結果。最後的輸出成果可以發現mysql的NPM套件會將關聯式資料庫所紀錄的表格式資料轉換為JSON格式的資料列,使資料在JavaScript的語法下能靈活使用。

參考資料

https://zh.wikipedia.org/wiki/MySQL

https://www.mysql.com

https://npmcompare.com/compare/mysql,mysql2


上一篇
Day22 DB-關聯式資料庫與NoSQL
下一篇
Day24 DB-NodeJS中的mongoDB
系列文
學習NodeJS的30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言